<html>
    <head>
        <title>使用方法</title>
    </head>
    <body>
        <script>
             /*
                        三、使用方法

                                有两种方法使用分布式锁API： "ABP的IAbpDistributedLock 抽象 " 和 "分布式锁库的API"
                                    
                                
                                1、使用 IAbpDistributedLock 服务

                                        IAbpDistributedLock是ABP提供的一个简单服务，用于简单使用分布式锁。

                                        eg： 使用 IAbpDistributedLock.TryAAcquireAsync 方法

                                                using Volo.Abp.DistributedLocking; 

                                                namespace AbpDemo
                                                {
                                                    public class MyService : ITransientDependency
                                                    {
                                                        private readonly IAbpDistributedLock _distributedLock; // 注入分布式锁服务
                                                        public MyService(IAbpDistributedLock distributedLock)
                                                        {
                                                            _distributedLock = distributedLock; 
                                                        }
                                                        
                                                        public async Task MyMethodAsync()
                                                        {
                                                            await using (var handle = await _distributedLock.TryAcquireAsync("MyLockName")) // 获取锁
                                                            {
                                                                if (handle != null)
                                                                {
                                                                    // 访问多个应用程序的公共资源
                                                                }
                                                            }   
                                                        }
                                                    }
                                                }

                                        TryAcquireAsync 可能无法获取锁。如果无法获取锁，它会返回null。
                                        
                                        在这种情况下，你不应该访问资源。

                                        如果返回结果不为null,则表示你已经获得了锁，可以安全地访问资源。

                                        TryAcquireAsync方法获得一下参数：
                                                        
                                                        ①、name（string，必需）：你的锁的唯一名称。不同的命名锁用于访问不同的资源。

                                                        ②、timneOut (TimeSpan) ：等待获取锁的超时时间。 默认为 TimeSpan.Zero,这意味着已经被另一个应用程序拥有，它不会等待。

                                                        ③、cancellationToken (CancellationToken) ：用于取消操作的令牌。

                                2、配置

                                            ★、分布式锁配置类 AbpDistributedLockOptions
                                                                    
                                                    AbpDistributedLockOptions是配置分布式锁定的主要选项类。

                                                    eg： 为应用程序设置 "分布式锁密钥前缀"

                                                        Configure<AbpDistributedLockOptions>(options =>
                                                        {
                                                            options.KeyPrefix = "MyApp1"; // 指定锁名前缀
                                                        });

                                                        将代码写入模块类的 ConfigureServices 方法中。

                                                    可配置的选项：
                                                            
                                                            ①、KeyPrefix (string, default:null):  指定锁名前缀

                                3、使用分布式锁库的API

                                            ABP的IAbpDistributedLock服务非常有限，主要设计为ABP内部使用。

                                            对于你自己的应用程序，你可以使用分布式锁库自己的API。


                    */
        </script>
    </body>
</html>